# 1. 单继承和方法的重写
class Person: # 父类
    def eat(self):
        print("我会吃饭")

    def sing(self):
        print("我会唱歌")


class Girl(Person):  # Person类的子类
    pass


class Boy(Person):
    def sing(self):  # 方法的重写，子类重写和父类一样名称的方法
        Person.sing(self)
        super().sing()  # super是一个特殊的类，类加()实例化一个父类对象
        super(Boy, self).eat()
        print("我会唱一路向北")


class StudentBoy(Boy):
    pass


# 2. 新式类和多继承
# python3中，如果一个类没有继承任何类，默认继承object类
class A(object):
    pass


class Father(object):
    def money(self):
        print("爸爸的钱被继承")


class Mother(object):
    def apperance(self):
        print("美貌被继承")

    def money(self):
        print("妈妈的钱被继承")


class Son(Father, Mother):
    pass



if __name__ == "__main__":
    gril = Girl()
    boy = Boy()

    # 子类默认继承父类的实例方法
    gril.sing()
    gril.eat()
    print("==============")
    boy.sing()
    boy.eat()
    print("==============")

    # 继承的传递性
    sb = StudentBoy()
    sb.sing()
    sb.eat()

    # 查看object类
    print(dir(object))

    # 多继承
    son = Son()
    son.money()  # 同名方法就近原则
    son.apperance()
    print(Son.__mro__)   # 查看方法调用顺序